.TOPIC:
Contents

Contents
                      ThrustMaster Enhanced Editor
                    Copyright 1996, ThrustMaster Inc.

    Click on a topic:

Using Help
Introduction
Editor Commands
Contacting ThrustMaster

Keyboard Input  Keyboard Operation

Frequently Used Programming Commands:

    BTN                             Button Commands
    PORTBx Command                  Analog Joystick Buttons
    Button Press & Release          /P /R Commands
    FLCS BTN S3 In/Out Command      /I /O Commands
    Rocker Switch Settings          /U /M /D Commands
    /A                               Force Analog  
    /T                               Toggle
    /N                               Force Single Character
    /H                               Hold
    TG1/TG2                          F-22 Trigger
    Combinational Keypresses        
    Basic Rules For Using Slash Codes


MDEF   Macro Definition Files       @      Special Macro Definitions 
ANT    Antenna Knob (TQS)           RNG    Range Knob (TQS)   
THR    Throttle Settings            MT     Minimum Throttle Setting    
RDDR   Digital Rudder               RATE   Keypress Rate Setting 
RAW    Keyboard Scan Codes          REM    Remark Line
SWAPTG F-22 Swap Trigger (TG1/TG2) 

USE    Configuration Statement

         TQS  WCS  MTYPE  FCLK  NOTHR  NOMOUSE  XIO


JSX  JSY  Digital Joystick Commands

.TOPIC:
USING HELP

Selecting a Help link:
----------------------
With a mouse - click on phrases outlined by two triangles.  With the 
keyboard - Press TAB or Shift-TAB to select a link.  Press ENTER to jump 
to that topic.

Scrolling the Help window:
--------------------------
With a mouse - click on the horizontal or vertical scroll bars.

With the keyboard - press the cursor navigation keys.

Closing the Help window:
------------------------
With a mouse - double click on the window's control box icon in the upper
left corner of the window.  With the keyboard - press Ctrl-F4.

Command Buttons:
----------------
Applications may use one or more of the following command buttons.  Use a 
mouse to click a button or press the letter mentioned below.

Contents - displays a table of contents for the application's Help.  Press 
C to select Contents.

Search -  opens a dialog box that lists all available Help topics.  Select 
a topic from the list box and press ENTER.  Press S to select Search.

Back - jumps to the last Help topic viewed.  Press B to select Back.

History - lists the last 20 Help topics viewed.  Jump to a topic by 
selecting from the list box and pressing ENTER.  Press T to select 
History.

Copy - copy the current topic or a portion of the current topic to the 
clipboard.  You can then exit help and paste the contents of the clipboard 
into your program file.

Print - print the current topic or a portion thereof to your printer or a 
file.

.TOPIC:
Editor Commands
Editor Commands:

The following keys are used in the enhanced editor to help you during 
the preparation of a new program file or to modify an existing file:

ESC -  Exit and return to the main menu
BSP -  Erase character directly to left of cursor
F10 -  Modify editor screen colors
Ctrl-LeftArrow -  Move to the first character of the word to the left
                  of the cursor
Ctrl-RightArrow - Move to the first character of the word to the right
                  of the cursor
Ctrl-Y - Delete the entire line
Ctrl-HOME - Move to the first character at the top of the file
Ctrl-END - Move to the last character at the end of the file
PGUP - Move up one page
PGDN - Move down one page
INS - Toggle between insert and overwrite modes
DEL - Delete the character at the cursor
Shift-END - Highlight the current line from the cursor position
            to the rightmost character
Shift-UpArrow - Highlight from the current line upward
Shift-DownArrow - Highlight from the current line downward
Ctl-X - Cut (delete) the highlighted portion of text to memory
Ctl-C - Copy the highlighted portion of text to memory
Ctl-V - Paste the most recently deleted or copied portion of text from 
        memory to the current document

.TOPIC:
PORTBx Command
PORTBx Command:

Joystick button inputs - default setup:

Joystick buttons 1 - 4 can be mapped to any button or hat switch on the
F-22 using the PORTBx IS Button_Label command (see the table below).

While in the F-22 Editor, type in the joystick port label corresponding to
the joystick button you wish to assign followed by the name of the F-22
button label.

Command Format:

                      Port_Label IS F22_Button_Label

    Where:

    Port_Label       Button Seen By Game       Typical F22_Button_Label

      PORTB1          joystick button 1                 TG1
      PORTB2          joystick button 2                  S2
      PORTB3          joystick button 3                  S3
      PORTB4          joystick button 4                  S4

Example:

PORTB1 IS TG1

.TOPIC:
TQS
Command: USE TQS

Device: TQS Throttle Quadrant System

Purpose: Defines the throttle device in your program file as the F16 TQS.

The "USE TQS" statement serves the same basic function as the USE WCS 
statement, i.e., it defines the type of throttle device you are using.  
The "USE TQS" statement should be entered on its own line near the top of 
your program file.  Do not put "USE TQS" and "USE WCS" in the same program 
file.

.TOPIC:
WCS
Command: USE WCS

Device: WCS Mark II Weapons Control System Throttle Device

Purpose: Defines the throttle device in your program file as the WCS Mark 
II.

The "USE WCS" statement serves the same basic function as the USE TQS 
statement, i.e., it defines the type of throttle device you are using.  
The "USE WCS" statement should be entered on its own line near the top of 
your program file.  Do not put "USE WCS" and "USE TQS" in the same program 
file.

.TOPIC:
XIO
Command: USE XIO

Device: F-22 With Mini-Cockpit

The "USE XIO" statement should be entered on its own line near the 
top of your program (F22) file.  This program command is used to tell your 
program file to accept commands for the mini-cockpit device.

.TOPIC:
MTYPE
Command: USE MTYPE Type

Where: Type = one of the available codes for two-button and three-button 
       mice.

Device: Used with the F-16 TQS (Throttle Quadrant System).

The "USE MTYPE Type" statement should be entered on its own line near the 
top of your program (F22) file.  Available designations for the "Type" 
statement are:

                  Standard Mouse Button
          Type    Left    Middle  Right
          ------------------------------
          2-Button Microsoft Type Mouse
          ------------------------------
          A1      T1      n/a     T6
          A2      T6      n/a     T1
          A3      T1      n/a     n/a
          A4      T6      n/a     n/a
          A5      n/a     n/a     n/a
          ------------------------------
          3-Button (Mouse Systems) Mouse
          ------------------------------
          B1      T1      T6      n/a
          B2      T6      T1      n/a
          B3      T1      n/a     n/a
          B4      T6      n/a     n/a
          B5      n/a     n/a     n/a
          B6      T1      T6      T3
          B7      T6      T1      T3
          B8      T1      n/a     T3
          B9      T6      n/a     T3
          B10     n/a     n/a     T3
          -----------------------------
          3-Button Logitech Type Mouse
          -----------------------------
          C1      T1      T6      n/a
          C2      T6      T1      n/a
          C3      T1      n/a     n/a
          C4      T6      n/a     n/a
          C5      n/a     n/a     n/a
          C6      T1      T6      T3
          C7      T6      T1      T3
          C8      T1      n/a     T3
          C9      T6      n/a     T3
          C10     n/a     n/a     T3
          -----------------------------
                  Disable Mouse
          -----------------------------
          NONE    n/a     n/a     n/a
          -----------------------------

For example, to create a Microsoft-type mouse that assigns the left 
mouse-button to button T1 on the TQS and the right mouse-button to button 
T6 on the TQS, type in the following line in your program (F22) file:

                            USE MTYPE A1

.TOPIC:
@
Command: @MacroName

Purpose: Special Macro Definition:

Special macros are normally preceded with the '@' character.  These macros 
can be used to combine logical groupings of commands, e.g., throttle 
commands or hat switch commands.   The best way to familiarize yourself 
with a special macro is to examine one.  The following example describes a 
special macro for the hat switch views on your FCS or PFCS:

       @StandardViews = HU UAROW HL LAROW HR RAROW HD DAROW 

By using the @StandardViews macro in your M22 or MDF file you eliminate 
the need to specify the keypress associated with each position of the hat 
switch on your FCS or PFCS.  GAME and THR commands can be similarly 
combined or grouped to specify analog or digital throttle commands. 


.TOPIC:
MDEF
Command: MDEF Filename

Purpose: Macro Definition File Command

Macro definition (.M22 or .MDF extension) files allow the user to define 
named macros which can then be referenced in program F22 or ADV files, 
respectively.  The macro definition file must be in the same directory as 
the program file.  More than one MDEF statement can be included in a F22 
or ADV file, the only limitation being that the total number of macros 
defined does not exceed 400.  Each line in the macro file normally 
contains an entry of the form: 

                  Macroname = Macro Body 

It may also include REM statements and other format lines (e.g., the 
tilde (~) character is used by the original Command & Control Center 
program for formatting purposes).  The macro name can be any continuous 
group of characters. Spaces and Tab characters may not be used.  Although 
macro names may be any length, only the first 16 characters are 
significant.  Macros can be used in a variety of ways.  The simplest way 
is to name a key with its function, e.g., 'FlapsUp = u'.  This would allow 
you to assign the flaps up function in your .F22 or .ADV program file by 
adding the following BTN line: 

                      'BTN 1 FlapsUp'. 

NOTE: The macro definition file extension (either .M22 or .MDF) is always 
added by the compiler. 

.TOPIC:
FCLK
Command: USE FCLK

Device: F-22 (alone or with MK2 or TQS throttle)

Purpose: This instruction tells the F-22 to base its character timing on 
the frame rate of the simulator.  This is useful for sims which only allow 
one character code per frame which helps to keep the throttle and other 
characters synchronized with the simulation.

The characters will be clocked out of the F-22 at the rate of one per 
frame.  If an FCLK input is not seen by the F-22 processor for a period of 
approximately 3 seconds, the F-22 will revert to normal operation, basing 
its character timing on the RATE parameter.  FCLK operation will resume 
once the processor sees the FCLK signals again.

.TOPIC:
NOTHR
Command: USE NOTHR

Device: F-16 Throttle Quadrant System (TQS)

Purpose: This instruction is used to force the TQS into analog throttle 
mode, thereby disabling digital throttle communication.

The USE NOTHR statement should be entered on its own line near the top 
of your program (F22) file.


.TOPIC:
USE
Command: USE DeviceSetting

Where DeviceSetting = WCS, FCLK, TQS, MTYPE, NOTHR, XIO

Purpose: Program (F22 File) Configuration Statement 

Equipment setup can be varied, depending on the specific ThrustMaster gear 
installed.  'USE WCS' indicates that you are using the Mark II throttle. 
'USE FCLK' tells the F-22 flight stick to base its character timing on the 
frame rate of the simulator in use.  'USE XIO' instructs the F-22 to 
include the additional mini-cockpit inputs.  'USE TQS' tells the F-22 to 
include the TQS throttle registers so it can get information on the 
throttle, trackball, and T1-T14 buttons on the TQS.  

With the TQS, you can also include the 'USE MTYPE A1-A5, or B1-B10' 
statement, which allows TQS buttons T1 and T6 to emulate the left and 
right buttons on your mouse. Button T3 on the TQS can be used to emulate 
the middle mouse button, if your mouse driver supports three-button 
operation.  MTYPE settings A1-A5 should be used to specify a Microsoft 
two-button mouse format.  MTYPE settings B1-B10 should be used to specify 
a Logitech three-button mouse format. 


.TOPIC:
MT
Command: BTN MT Setting

         Where Setting = MacroName or Keypress Sequence

Device: TQS Throttle w/F-22, or Mark II Throttle with F-22

Purpose: Assigns character generation to the minimum throttle position.

See also THR Throttle Command

MT is treated just like any button, even though it is actually a throttle 
position.  Minimum throttle is that small region between the idle detente 
(the first notch) and full off.  MT types any assigned character only 
once (you could say it has a built-in /N modifier).  If continuous 
output is desired, use the button modifiers () and {}.  Moving the 
throttle from the full off position to idle detente acts like "releasing" 
the MT switch.  

MT cannot be used with the slash codes /T, Rocker Switch Settings.

MT operates only when the throttle is defined for digital operation.  MT 
also must be placed after the THR line or @DigitalThrottle line.

.TOPIC:
JSX
Joystick X-Axis Input

Device: F-22 and FLCS

Purpose: Assigns character generation (type 1, 2, or 3) to the joystick 
x-axis (the left-right motion of the joystick)

See also JSY Command

Type 1 Device:

Use: JSX 1 #steps StepUpCharacter StepDownCharacter CenterCharacter

JSX as a type 1 device follows the same format as type 1 ANT.

Type 2 Device:

Use: JSX 2 #steps FullUpCharacter....CenterCharacter....FullDownCharacter

JSX as a type 2 device follows the same format as type 2 ANT.

Type 3 Analog Device:

Use: JSX 3 LeftCharacter CenterCharacter RightCharacter

JSX type 3 follows the format for a basic type 3 device.  The left and 
right characters will be generated continuously, while the center 
character will be sent only once.

NOTE: NO SLASH CODES OR BUTTON MODIFIERS (/N, /H, etc.) CAN BE USED WITH 
THE JSX STATEMENT.

Calibration is required for the joystick to be used in digital mode.  This 
can only be done after the JSX statement has been downloaded to the F-22.  
If no JSX statement is used in the download file, the F-22 defaults to 
analog mode.

.TOPIC:
JSY
Joystick Y-Axis Input

Device: F-22 and FLCS

Purpose: Assigns character generation (type 1, 2, or 3) to the joystick 
x-axis (the forward-backward motion of the joystick)

See also JSX Command

Type 1 Device:

Use: JSY 1 #steps StepUpCharacter StepDownCharacter CenterCharacter

JSY as a type 1 device follows the same format as type 1 ANT.

Type 2 Device:

Use: JSY 2 #steps FullUpCharacter....CenterCharacter....FullDownCharacter

JSY as a type 2 device follows the same format as type 2 ANT.

Type 3 Analog Device:

Use: JSY 3 LeftCharacter CenterCharacter RightCharacter

JSY type 3 follows the format for a basic type 3 device.  The left and 
right characters will be generated continuously, while the center 
character will be sent only once.

NOTE: NO SLASH CODES OR BUTTON MODIFIERS (/N, /H, etc.) CAN BE USED WITH 
THE JSY STATEMENT.

Calibration is required for the joystick to be used in digital mode.  This 
can only be done after the JSY statement has been downloaded to the F-22.  
If no JSY statement is used in the download file, the F-22 defaults to 
analog mode.

.TOPIC:
ANT
Antenna Knob Command: ANT Setting

Device: TQS Only

Purpose: Assigns character generation (type 1 or 2) to antenna knob 
         rotation.

Type 1 Device:

Use: ANT 1 #steps StepUpCharacter StepDownCharacter CenterCharacter

ANT follows the basic format for a type 1 device, requiring up and down 
(or increase and decrease) characters.  It also has a center character for 
use in game or simulator commands having a centering function.  If the 
center character is not needed, simply insert an unused keystroke (! is 
used here):

Example: ANT 1 3 U D !

The "U" is the StepUpCharacter, with "D" playing the role of the 
SteDownCharacter.  #steps defines that 3 characters will be typed on 
either side of the center position as the knob is moved stop-to-stop.


Type 2 Device:

Use: ANT 2 #steps FullUpCharacter....CenterCharacter....FullDownCharacter

As a type 2 device, you need to define a character for each end-of-travel, 
all the characters to use in between, a center character, and the total 
number of characters, which must be an odd number. 


NOTE: NO SLASH CODES OR BUTTON MODIFIERS (/N, /H, etc.) CAN BE USED WITH 
THE ANT STATEMENT.

.TOPIC:
RNG
Range Knob Command: RNG Setting

Device:  TQS Only

Purpose:  Assigns character generation (type 1 or 2) to range knob 
          rotation.

Type 1 Device:

Use: RNG 1 #steps StepUpCharacter StepDownCharacter

RNG requires up and down characters (or increase and decrease characters),
and  the number of characters (#steps) to type to the computer as the knob 
is moved from stop-to-stop.

Type 2 Device:

Use: RNG 2 #steps FullUpCharacter....FullDownCharacter

A type 2 RNG statement needs a character for each end-of-travel, all the 
characters to use in between, and the total number (#steps) of characters 
needed. 


NOTE: NO SLASH CODES OR BUTTON MODIFIERS (/N, /H, etc.) CAN BE USED WITH 
THE RNG STATEMENT.

.TOPIC:
RDDR
Rudder Command: RDDR Setting

Device:  Used with F-22 or FLCS and TQS with a rudder control
         system (RCS)

Purpose:  Assigns character generation (type 1, 2, or 3) to the RCS

Type 1 Device:

Use: RDDR 1 #steps RudderLeftChar RudderRightChar CenterCharacter

Type 2 Device:

Use: RDDR 2 #steps FullLeftChar....CenterChar....FullRightChar

Type 3 Device:

Use: RDDR 3 LeftCharacter CenterCharacter RightCharacter

NOTE: NO SLASH CODES OR BUTTON MODIFIERS (/N, /H, etc.) CAN BE USED WITH 
THE RDDR STATEMENT.

Calibration Required:  Calibration is required for the rudders to work 
properly in digital mode.  Download a file containing the RDDR statement, 
and then run the calibration utility (F22SETUP.EXE).  Select the rudder 
calibration option.

.TOPIC:
Keyboard Input

See also BTN Commands   Keyboard Operation

Program and macro files contain special instructions which tell your 
computer what character or keypress to generate when you press each button 
or hat-switch on your throttle and stick.  

Many of the keys on a normal AT-style keyboard generate scan codes when 
pressed that do not translate into visible characters on your screen.  For 
example, at the DOS prompt, try pressing the function keys at the top of 
your keyboard (keys F1 - F12).  You won't see anything on the screen but 
the computer "sees" each keypress because of the unique scan code it 
generates.  The following keyboard template shows the special designations 
that are used in your program and macro files to represent the keys on a 
standard AT-style keyboard:

 ESC F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12   SCRLCK
 `  1 2 3 4 5 6 7 8 9 0 - = BSP    AUXINS AUXHOME AUXPGUP   NUML KP/ KP* KP-
 TAB  q w e r t y u i o p [ ] \     AUXDEL AUXEND  AUXPGDN  KP7  KP8 KP9 KP+
 CAPS  a s d f g h j k l ; ' ENT                            KP4  KP5 KP6
 LSFT   z x c v b n m , . / RSFT         AUXUAROW           KP1  KP2 KP3
 LCTL LALT SPC RALT RCTL        AUXLAROW AUXDAROW AUXRAROW  KP0  KP. KPENT

       Combinational Keypresses, e.g., CTL x  SHF x  ALT x

For example, if you want to instruct or program button S1 on your F-22 to 
generate the "Backspace" character every time it is pressed, you would add 
the following line to your program (F22) file:

                          BTN S1 BSP
.TOPIC:
Keyboard Operation

See also BTN Commands   Keyboard Input 

Programming your throttle or joystick to perform a particular function is 
basically a matter of getting it to send the right sequence of key codes 
to the PC. 

The keyboard operates by sending 'Make' and 'Break' codes to the PC. These 
'codes' are sequences of one or more data bytes. They are not 'ASCII 
Characters', but just indicate which keys have been moved. When you press 
a key, the 'Make' code is sent. When you release the key, the 'Break' code 
is sent. Each key on the keyboard has a unique sequence of codes assigned 
to it for its 'Make' and 'Break' sequences.

The PC can't actually determine whether a key is pressed or released at 
any particular time. Rather, it simply keeps track of the 'Make' and 
'Break' codes. When it receives a 'Make' code, it flags the key as pressed 
until it receives the corresponding 'Break' code, at which time it flags 
the key as released. 

Since the sequencing of the 'Make' and 'Break' codes is important to the 
discussion of button commands and Combinational Keypresses, it will be 
convenient to adopt some notation for them. The '+' character will be used 
to indicate the 'Make' code for a key, and the '-' character will be used 
to indicate the 'Break' code. For instance: +a -a would indicate the press 
and subsequent release of the 'a' key.

.TOPIC:
RATE
Rate Command: RATE ####

              Where: #### is a number between 0 and 1000

Device: F-22 or FLCS with TQS or Mark II Throttle

RATE is the speed at which your equipment generates keyboard characters.  
These characters are then stored in the keyboard buffers.  Rate settings 
are defined in milliseconds.  For example, a rate setting of 20 would 
generate characters quickly, while a rate setting of 1000 (1000ms=1sec) 
would generate characters very slowly (for a computer). Begin by setting 
the RATE at 100, then adjust the setting up/down according to how your 
game performs. 

NOTE:  Some game software programs read keyboard buffer information very 
slowly.  While playing "Wing Commander" for example, you push the MARK II 
WCS throttle forward to full power and it should generate 50 throttle 
increase characters.  However, during this time "Wing Commander" is busy 
executing graphics or sound.  As a result, you lose characters because the 
buffers were full and your computer (controlled by your game software) may 
have read only half the characters generated during the throttle increase.  
You're at half throttle!  If you find yourself in a situation where you 
are losing characters, adjusting the rate setting may be the solution to 
enhancing your game play. Enter the RATE setting by placing the cursor one 
space to the right of RATE on the template and type in 100. 


.TOPIC:
REM
Remark Command: REM

Game program files often contain lines that start with or contain the word 
"REM".  "REM" is short for "REMARK".  The REM command is useful when you 
need to place comments in your file for the sake of explaining things.  
Any characters or text that follow the REM command are ignored as program 
instructions.

All comment lines (which could include the name of the game and the 
manufacturer's name, the author's name, the date the file was 
created/modified etc.) must start with a "REM" statement. 

Example:

REM Sabre Jet Fighter
REM By Combat Simulations, Inc.
REM F22 file created by John Doe

.TOPIC:
THR
Throttle Input

Device: TQS or WCS Mark II Throttle

Purpose: Assigns character generation (type 1 or 2) to the throttle 

See also MT Minimum Throttle Command

NOTE: Omit or place REM in front of the throttle statement in your F22 or 
B50 file in order for the throttle device to be recognized as an analog 
device.

Type 1 Device:

Use: THR 1 #Steps #ABSteps ThrUp ThrDown ABEntry ABExit APUp ABDown

Type 2 Device:

Use: THR 2 #Steps #ABSteps ThrottleIdle...ThrottleMax MinAB...MaxAB


Type 1 Throttle Statement:

The Type 1 throttle statement defines the keyboard output for throttle 
movement between idle and MIL detents and the afterburner action (the 
range between MIL detente and full-forward).  In order to use a Type 1 
throttle statement you will need to know the throttle increase and 
decrease characters, and the number of steps it takes to go from idle to 
full throttle (not including afterburner or full power, if your simulation 
has commands for this).  

As an example, let's assume that the throttle increase and decrease 
characters are + and -, respectively, and the simulation uses a maximum of 
10 keystrokes to go from idle detent to full power (or back again).  So, 
for the initial portion of the throttle statement, we have:

    #Steps  =  10
    ThrUp   =  +
    ThrDown =  -

Now for the afterburner portion of the throttle statement.  Simulations 
handle the afterburner in a variety of ways:

Case 1. There is NO afterburner or full power command, only the 
        throttle increase keys.
Case 2. There ARE afterburner or full power keystrokes.
Case 3. There are keystrokes to get in and out of afterburner, AND 
        increase/decrease keys for the afterburner.

In the first case above, make the afterburner "look like" a normal 
throttle increase or decrease:

    #ABSteps  = 2
    ABEntry   = +
    ABExit    = -
    ABUp      = +
    ABDown    = -

If you set up your throttle like this, consider reducing the number of 
throttle steps (#Steps) so that full power is only reached at or past the 
MIL detent position (i.e., change #Steps above from 10 to 8, since we've 
defined 2 AB steps).  Putting everything together, our Type 1 throttle 
statement for case 1 above should look like this:

                        THR 1 8 2 + - + - + -
                            │ │ │ │ │ │ │ │ │
                   Type─────┘ │ │ │ │ │ │ │ └─────ABDown
                   #Steps─────┘ │ │ │ │ │ └─────────ABUp
                   #ABSteps─────┘ │ │ │ └─────────ABExit
                   ThrUp──────────┘ │ └──────────ABEntry
                   ThrDown──────────┘

For the second situation (case 2), let's assume our simulation uses 
keystrokes for turning full power on and off.  Let's say the commands are 
: for on and ; for off.  One possibility is:

    #ABSteps  = 2
    ABEntry   = +
    ABExit    = -
    ABUp      = :
    ABDown    = ;

By using the : and ; characters for ABUp and ABDown, the MIL detent will 
let your hand "know" that you're at maximum throttle without going to 
afterburner.  You have to push the throttle past the detent position to 
kick in the afterburner.  Our case 2 throttle statement would look like 
this:

                        THR 1 10 2 + - + - : ;
                            │  │ │ │ │ │ │ │ │
                   Type─────┘  │ │ │ │ │ │ │ └─────ABDown
                   #Steps──────┘ │ │ │ │ │ └─────────ABUp
                   #ABSteps──────┘ │ │ │ └─────────ABExit
                   ThrUp───────────┘ │ └──────────ABEntry
                   ThrDown───────────┘

For the third possibility (case 3), let's assume that : and ; are used to 
turn the afterburner on and off, but > and < are used for afterburner 
increase and decrease, respectively.  Let's also assume that the game 
allows the afterburners to be increased 3 times (using 3 keypresses, of 
course).  Therefore we have:

    #ABSteps  = 3
    ABEntry   = :
    ABExit    = -
    ABUp      = >
    ABDown    = <

Our case 3 throttle statement would look like this:

                        THR 1 10 2 + - : ; > <
                            │  │ │ │ │ │ │ │ │
                   Type─────┘  │ │ │ │ │ │ │ └─────ABDown
                   #Steps──────┘ │ │ │ │ │ └─────────ABUp
                   #ABSteps──────┘ │ │ │ └─────────ABExit
                   ThrUp───────────┘ │ └──────────ABEntry
                   ThrDown───────────┘


Type 2 Throttle Statement:

Use: THR 2 #Steps #ABSteps ThrottleIdle...ThrottleMax MinAB...MaxAB

Like a Type 1 throttle statement, the Type 2 throttle statement defines 
the keyboard output for throttle movement between idle and MIL detents and 
the afterburner action.  If a simulation gives a throttle 6 levels of 
power and uses keys 1-6, but no afterburner, then the throttle information 
could look like this:

    #Steps     = 5
    #ABSteps   = 1
    ThrottleIdle...ThrottleMax = 1 2 3 4 5
    MinAB...MaxAB = 6

This puts the maximum throttle setting in the afterburner position.  The 
resulting THR 2 statement would look like this:

                        THR 2 5 1 1 2 3 4 5 6
                            │ │ │ └───┬───┘ │
                   Type─────┘ │ │     │     └───────────────MinAB...MaxAB
                   #Steps─────┘ │     └────────ThrottleIdle...ThrottleMax
                   #ABSteps─────┘

Now assume the simulation still has 6 different power levels, but included 
2 afterburner levels using & and *.  The throttle information would look 
like this:

    #Steps     = 6
    #ABSteps   = 2
    ThrottleIdle...ThrottleMax = 1 2 3 4 5 6
    MinAB...MaxAB = & *

The THR 2 statement would look like this:

                        THR 2 6 2 1 2 3 4 5 6 & *
                            │ │ │ └───┬─────┘ ├─┘
                   Type─────┘ │ │     │       └─────────────MinAB...MaxAB
                   #Steps─────┘ │     └────────ThrottleIdle...ThrottleMax
                   #ABSteps─────┘


.TOPIC:
BTN
Button Command: BTN MacroName or KeySequence

See also Combinational Keypresses   Keyboard Input

Purpose: Assigns a button on your throttle or stick device to generate 
single or multiple keyboard characters (either directly or indirectly 
through a macro.)

Example 1:  BTN T3 R

The character "R" is typed to the computer when button T3 on the throttle 
controller is pressed.


Example 2:  BTN H1U A B C

The character sequence "A B C" is typed to the computer when you press hat 
switch 1 up on your F-22 flight stick.


Example 3:  BTN S4 ToggleRadarOnOff

A macro named "ToggleRadarOnOff" is called when button S4 on your F-22 
flight stick is pressed.


Button modification commands provide additional versatility and 
functionality to your F-22 and/or TQS/WCS buttons and switches.  They can 
be used to do anything from toggling a designated button between as many as 
15 different macros, or performing one macro on the press of a button and 
another on the release.  There are literally hundreds of different ways 
your buttons and switches can be configured.      

These commands are typically placed in your F22 files immediately after 
the Button Codes  (i.e. BTN S1) and just before the Macro names. 

Additional Button Command Programming Information:

    Button Press & Release          /P /R Commands
    PORTBx Command                  Analog Joystick Buttons
    BTN S3 In/Out Command           /I /O Commands
    Rocker Switch Settings          /U /M /D Commands
    /A                               Force Analog  
    /T                               Toggle
    /N                               Force Single Character
    /H                               Hold
    TG1/TG2                          F-22 Trigger
    TG                               FCS/PFCS/XL Trigger
    Combinational Keypresses        
    Basic Rules For Using Slash Codes

.TOPIC:
/T
Toggle Command: /T

Using the /T toggle code in a BTN line will allow any combination of eight 
buttons to toggle between as many as 64 separate macros. This means that 
you may choose to use this toggle option on four F-22 buttons and four TQS
or WCS buttons, or have six toggling buttons on the TQS or WCS and two on
the F-22, and vice versa, etc.

Note - You can place toggle codes on Hat switches but you are limited to 
only two toggles per Hat position. 

Let's look at an example: 

BTN S2 /T Chaff 
       /T Flare 
       /T ScreamForHelp 
 
In this example BTN S2 (button #2) is using the toggle option.  When 
button #2 is pressed it will toggle through "Chaff", "Flare", and 
"ScreamForHelp".   

Basically, if you use more than two toggle commands, the button or switch 
programmed with toggles will cycle through the toggles sequentially.  When 
the last macro has been toggled, it will begin the sequence again, 
starting with the first macro. 

.TOPIC:
Button Press & Release
Button Press & Release Commands (/P and /R):

The button press command (/P) is used to indicate that the specified 
keypress or macro which follows is to be generated upon the press of the 
button or switch.   The /P command is designed to be used in conjunction 
with the /R command.   

For example: 

BTN S2 /P Chaff 
       /R Flare 

In this example BTN S2 (button #2) is using the press and release option.  
When this file is downloaded to the F-22 button #2 will generate the Chaff 
macro when pressed, and the Flare macro when released. When using the 
press and release commands remember to include both the /P and /R and 
their respective definitions. 

.TOPIC:
/N
Force Single Character Code Command: /N 

Using the /N command in a button or switch line forces the macro defined 
character to generate only once per press of this button. 

For example: 

BTN S2 /N FireMissles 

In this example BTN S2 (button #2) is using the /N option.  You should 
recognize that the "FireMissles" has been defined in the adjoining M22 
file.  Let's say "FireMissles" is defined as an "X".   Normally, without 
the /N option, button S2 would generate "X's" as long as button 2 was held 
down.  With the /N in the command line, button 2 would only generate one 
"X" per press.  This is what we mean by forcing single character 
generation.   

If you're using a Mark II WCS with the F-22 you will notice that T7 
(rocker up) and T8 (rocker down) usually use the /N code.  This is because 
the rocker switch is actually seen as a button device.   When you move the 
rocker switch up, it is interpreted as pressing a button and holding it.  
When you return the rocker switch to the middle position it is seen as 
releasing the button.  Therefore, when you put the rocker in the up or 
down position it will generate repeating characters until the rocker is 
returned to the middle.  To eliminate this potential problem, the /N 
option is used. 

By now you should have a pretty good feel for placing the configuring 
codes.  With the /N command there are a few do's and don'ts. Don't use it 
unless you have to - it uses up valuable memory. Also, it cannot be used 
with the Hat Middle positions.

.TOPIC:
BTN S3 In/Out Command
Button S3 In/Out Command (/I and /O):

The S3 In/Out codes relate to a specific hardware design enhancement 
within the F-22 and FLCS sticks.   

When the S3 button is held in (pressed) all buttons and switches using the 
/I and /O designation will perform a different set of functions.  When the 
S3 button is released the designated buttons and switches will return to 
their standard functions. 

The codes are /I and /O.  The /I code indicates that the macro which 
follows is to be performed when the S3 button is pressed and held.   The 
/O code indicates that the macro which follows is to be performed when the 
S3 button is in the out position (not pressed). This In/Out capability 
will only occur when the buttons and switches use the /I and /O codes. 

For example: 

BTN S2 /I DropBombs 
       /O FireMissles 

In this example button S2 would perform "DropBombs" when the S3 button is 
pressed and held.  When button S3 is not engaged button S2 will perform 
"FireMissles". 

All buttons and switches can be programmed to take advantage of this 
option, except for the S3 switch itself, which does the In/Out toggling. 
Remember, when using this option, whatever functions you program to the 
BTN S3 line will be performed in addition to the switching function.  We 
advise when using the In/Out function that you keep things simple, and not 
program anything to the BTN S3 line. 

.TOPIC:
Rocker Switch Settings
Mark II Throttle Rocker Switch Commands: /U, /M and /D
TQS Dogfight (T7/T8) Switch Commands: /U, /M, and /D

The /U, /M, and /D codes are available in conjunction with use of the
rocker switch on the Mark II WCS throttle or the Dogfight switch (T7/T8)
on the F-16 TQS.

These codes can be used to modify all the buttons and switches on the WCS 
and F-22 to different sets of commands depending upon the position of the 
three-way rocker switch on the handle of the WCS or the Dogfight switch
on the TQS.

For example: 

BTN S1 /U AirAirRadar 
       /M NavRadar 
       /D GroundRadar 
 
In this example BTN S1 (button #1 on the F-22) would generate 
"AirAirRadar" when button #1 was pressed when the three-way rocker 
switch on the WCS handle was in the upper position or the Dogfight
switch on the TQS was in the T7 positon.  "NavRadar" would be
generated when button #1 is pressed and the three-way rocker switch on
the WCS or the Dogfight switch on the TQS was in the middle position.
And finally, when the three-way rocker switch on the WCS was in the down
position or the Dogfight switch on the TQS was in the T8 position, button
#1 would generate "GroundRadar".

.TOPIC:
/H
Hold Button Command: /H 

In some circumstances, it is necessary to hold the key down even when 
other buttons are pressed. The most common examples are keys that move 
control surfaces, and situations that require multiple keys to be held to 
achieve a particular view. For instance, suppose you wanted to program a 
hat to control the rudders. You might try (assuming 'l' and 'r' are the 
left and right rudder keys respectively)

                           BTN H1L l
                           BTN H1R r

This would activate the rudders, but because of the way the repeating keys 
operate on the F-22, as soon as you pushed another button the rudder would 
return to it's neutral position. The use of the /H code would get around 
the problem, since it does not generate a 'Break' until the Hat is 
released. The coding would look like this:

                          BTN H1L /H l
                          BTN H1R /H r

The /H codes are also slightly different in the way they appear on the 
screen. There is only a single 'Make' code generated, so you only see one 
character when you press the button. The PC will see the key as held, 
however, and in situations where the /H is required, the absence of the 
repeated 'Make' codes is of no consequence. The game will be looking only 
at the first 'Make' code in such situations, anyway.

Holding down multiple keys is simply a matter of adding them to the list. 
To hold down KP8 and KP5 for a combinational view, the program would look 
like this:

                      BTN H1U /H KP8 KP5

When the button was pressed, the sequence generated would be:

                           +KP8 +KP5

and when the button was released, the sequence would be:

                           -KP8 -KP5

Any characters generated by other buttons while H1U was held would be 
sent normally,

While /H codes are very useful, they are not without a few problems. 
First, as mentioned earlier in the discussion of repeating keys, it's 
generally not possible to use them for anything other than unmodified 
keys. The use of upper-case, SHF, ALT or CTL modifiers creates problems in 
that the PC will apply those modifiers to all characters transmitted while 
the /H is held down, i.e.

                           BTN S1 /H A

will upper-case all keys transmitted while S1 is pressed. Consequently, 
the use of such modifiers must generally be avoided in /H groups.

A second limitation placed on /H groups is that they cannot be used with 
the /I and /O, or the /U, /M, and /D modifiers. The reason for this is not 
immediately obvious, but to have allowed them to be used there would 
create a strong likelihood of 'stuck' keys during operation. Consider the 
following example:

                         BTN S1 /O /H a
                                /I /H b

Now suppose that during game play, you were to press S1, then press S3, 
then release S1. Since S3 was not pressed initially, the /O side of the 
definition would be in control. The initial press of S1 would send the 
'Make' code for the 'a' as expected. When S3 was pressed, that would put 
the /I side of the definition in control. Subsequently releasing S1 would 
result in the 'Break' break code for the 'b' being sent. The sequence at 
the PC would be: +a -b

The PC has seen the 'a' pressed, but never sees it released, so it will 
consider it to be still pressed. The key is 'stuck', and will remain that 
way until a 'Break' for the 'a' is sent, either by hitting the 'a' on the 
keyboard, or sending a complete 'a' with the F-22. It may remain stuck 
even if you exit the game.

The limitation on the /I, /O, /U, /M and /D codes can be overcome in a 
couple of ways. One is simply to come up with a scheme that doesn't need 
them. The use of the /I and /O codes with held characters most commonly 
shows up in view switching situations. One method that works in some 
situations is to just use unmodified views on the hat, then add the 
modifier key to button S3. For example, suppose that the four basic views 
are KP8, KP6, KP2, and KP4. Also assume that adding KP5 to these four will 
add the UP modifier, and that adding KP0 to them will add the DOWN 
modifier, i.e. KP4 is Look Left and KP4 + KP5 is Look Up and Left. In that 
case, a setup like this:

                  BTN H1U /H KP8     rem Look Up
                  BTN H1L /H KP4     rem Look Left
                  BTN H1D /H KP2     rem Look Back
                  BTN H1R /H KP6     rem Look Right

                  BTN S3 /H KP5      rem Add UP Modifier
                  BTN S4 /H KP0      rem Add DOWN Modifier

may prove workable, giving 12 views via combinations of the hat and the S3 
and S4 keys.

If no suitable arrangement can be found using the standard keys, it is 
possible to generate held keys within /I-/O and /U-/M-/D groups using the 
RAW function.

.TOPIC:
/A
Force Analog Mode Command: /A 

The /A command is no longer necessary with the F-22.  Joystick analog
button support for the F-22 is handled using the PORTBx Command.

Four of the buttons on the FLCS can be used as either analog devices,
digital devices, or both.  This means that in the analog mode they will 
run through the game card and function as your game software has 
designated.  In the digital mode these buttons will function through the 
keyboard, and will operate as you have designated in the FLCS file.  By 
using the /A command the buttons can do both at the same time. The buttons 
that have this capability are the S2, S3, S4, and TG1.  Whether these 
buttons operate in Analog, Digital, or both depends upon how the BTN line 
is defined. 

Normally a BTN line for switch S2 might look like -  

BTN S2 CloakingEngaged 

Using the following options in your FLCS file will have the following 
effect: 

Delete the entire line = Analog only 
Place a REM statement before the line = Analog only 
Include BTN statement with definition = Digital only 
Include BTN statement but no definition = No Digital or Analog 
Include BTN statement with /A and definition = Digital and Analog 
Include BTN statement with /A and no definition = Analog only 


Now let's review.   

If you left the BTN S2 line completely out of your FLCS file or REM'ed it 
out, that switch will only function as an Analog device.  It will then 
perform whatever the game software designates. 

If you left the button code line BTN S2 in you FLCS file there are two 
possible choices.  If you do not define BTN S2 with a macro, the button 
will not function as either an Analog or Digital device.  In essence it 
will not work at all.  We do not recommend using this option for obvious 
reasons.   

If you do define the BTN S2 line with a macro, as we did with 
"CloakingEngaged", the button will function as a Digital device only. The 
third option is to use the /A command.  This command is designed to be 
used in the following manner.  By placing this command following the BTN 
S2 statement and then following it with a macro definition, this button 
becomes both Digital and Analog.  This means that when BTN S2 is pressed 
it will function as the game software designed AND as you programmed in 
your FLCS file. 

And one final note, if you use the /A command in your FLCS without a 
definition the button or switch will function as an Analog device only.  
You should not use this method if you are trying to achieve the Analog 
function. 

.TOPIC:
BASIC RULES FOR USING SLASH CODES 

There are a few basic rules to follow when using forward slash codes (/).   

1 - They must be placed after the button and switch codes (i.e. BTN 
    S2 /H MacroName) 

2 - There must be a single space before and after the forward slash 
    codes (see preceding example) 

3 - They must appear in a specific order when more than one type is 
    used for one button or switch (see "Slash Code Hierarchy" below). 
  
 
SLASH CODE HIERARCHY 
When using multiple slash codes for configuring a button or switch it is 
important to use the correct hierarchy.  The ordering of slash codes 
would proceed as defined 

1 - The /U /M /D would precede all other slash codes.

2 - The Force Analog (/A) command precedes /I, /O, /T, /P, & /R. 

3 - The In/Out (/I and /O) command precedes /T and /P/R commands. 

4 - The Toggle (/T) command precedes /P/R commands. 

5 - The Press and Release (/P and /R) commands are always last. 
 
The following is an example: 

BTN S2 /U /A /I /T /P (MacroName{s})
                   /R (MacroName{s})
                /T /P (MacroName{s})
                   /R (MacroName{s})
             /O /T /P (MacroName{s})
                   /R (MacroName{s})
                /T /P (MacroName{s})
                   /R (MacroName{s})
       /M /A /I /T /P (MacroName{s})
                   /R (MacroName{s})
                /T /P (MacroName{s})
                   /R (MacroName{s})
             /O /T /P (MacroName{s})
                   /R (MacroName{s})
                /T /P (MacroName{s})
                   /R (MacroName{s})
       /D /A /I /T /P (MacroName{s})
                   /R (MacroName{s})
                /T /P (MacroName{s})
                   /R (MacroName{s})
             /O /T /P (MacroName{s})
                   /R (MacroName{s})
                /T /P (MacroName{s})
                   /R (MacroName{s})

It is important to note the sequence or hierarchy when using multiple 
slash codes in a F22 file.  You must strictly adhere to the order 
described above or you will experience problems when saving your files. 


.TOPIC:
SWAPTG
Swap Trigger Command: SWAPTG

The swap trigger option allows the default trigger setup to be swapped.  
Normally TG1 (trigger position #1) is the first click encountered when 
squeezing the trigger.  TG1, by default is an analog button so you do not 
need to use /A with that command.  TG2 is the second click.  By using the 
SWAPTG statement you can reverse the two positions, making TG1 the second 
click and TG2 the first.   

To use the SWAPTG command just place the command SWAPTG on its own line 
near the top of your program (F22 or B50) file.   

See also TG1/TG2

.TOPIC:
TG1/TG2
Command: BTN TG1 KeyPress or MacroName ...OR... 
         BTN TG2 KeyPress or MacroName

Device: F-22 and FLCS

BTN TG1 (trigger position #1) is activated by squeezing the red trigger on 
the F-22 or FLCS until you hear or feel the first "click".  This button is 
designed to behave like the normal analog trigger press on any 2-axis 
flight stick device.  There are 3 ways to achieve standard analog 
operation from your trigger:

    1) Omit the BTN TG1 line from your program (F22 or B50) file.
    2) Place a REM statement in front of the BTN TG1 line.
    3) Add the /A (analog) switch to your BTN TG1 line, i.e., BTN TG1 /A

If you decide to use your trigger as a digital device instead, i.e., you 
would like it to generate a certain keypress or series of keystrokes when 
pressed, then add the BTN TG1 KeyPress or MacroName command to your 
program file.  For example, let's say that your guns are fired by pressing 
key "g" on your keyboard.  You can program this to your F-22 trigger as 
follows:

    BTN TG1 g

If you press your trigger fully down, you'll hear and feel a second 
"click" as you pass the second detent position.  This is the second stage 
trigger position, or BTN TG2.  Some simulations provide separate commands 
for machine gun and cannon fire.  For example, Warbirds uses normal analog 
trigger for machine gun fire and key "b" to fire your secondary weapon 
(usually cannons).  Both machine gun and cannon fire can be programmed 
to your TG1 and TG2 positions as follows:

    BTN TG1 /A (FLCS line) or PortB1 IS TG1 (F-22 line)
    BTN TG2 /H b

The /H (hold) modifier is used to ensure that the cannons will continue to 
fire when the trigger is fully depressed even when other characters are 
being generated (e.g., you might be lowering flaps to tighten your turn in 
a slow speed dogfight).

See also SWAPTG command.

.TOPIC:
Introduction
Introduction:

See also Keyboard Input

Most games and simulations require typing in commands at the keyboard, 
using a joystick, or a combination of joystick movement and keyboard 
entry.  ThrustMaster products eliminate much (if not all) of the keyboard 
entry chores by having keystrokes assigned to particular switches, 
buttons, and knobs.  This is why your ThrustMaster throttle or joystick is 
plugged into the keyboard connector on your computer - the computer "sees" 
commands being typed from what it thinks is the keyboard.

Your throttle and joystick controls are "programmed" as to what 
information to send a game or simulation through a series of statements 
contained in download files.  This information resides in the controls 
until another group of instructions is downloaded to replace them (the 
instructions are NOT lost when the computer is powered down).  Take the 
time to look at an instruction, or program file (.F22 or .B50 file 
extension) to familiarize yourself with the way the statements look.  

.TOPIC:
Combinational Keypresses

See also Keyboard Input  BTN Command

Generating single keypresses or strings of single keypresses with the F-22 
is a straightforward process. The desired characters are simply listed in 
the BTN statement. There are several situations, though, that require that 
multiple keys be pressed simultaneously, and these can create problems. 
The correct programming method is often not clear as it depends on how the 
game processes the keystrokes. This section will attempt to explain the 
different techniques available and when these techniques should be used.

SHF, ALT, and CTL
-----------------

The most common form of simultaneous keypress is when it is necessary to 
generate a modified key like CTRL-C, ALT-J, or even 'A', since the 
upper-cased character implies that the SHF key is held down while the key 
is pressed. It is generally a simple matter to program these combinations  
with the F-22, you simply precede the character with the appropriate 
modifier:

                        BTN S1 CTL c

Any time you specify an upper-case character, the F-22 generates the
SHF code for you, so;

                        BTN S1 A

is actually treated as:

                        BTN S1 SHF a

and the key sequence generated is:

                       +SHF +a -SHF -a

It is worth noting that only the SHF, CTL, and ALT keywords are treated as 
modifiers. The variations that specify particular keys, such as LALT and 
RSFT are treated as regular keys. So if you program something like: BTN S1 
LALT j the sequence that is generated is:

                     +LALT -LALT +j -j

and an actual ALT-J combination does not occur. Programming it as:

                       BTN S1 ALT j

produces the desired:

                       +ALT +j -ALT -j

Simultaneous Groups
-------------------

As noted in the F-22 manual, if you enclose a set of characters in 'curly 
brackets' it causes the ordering of 'Make' and 'Break' codes to be 
modified so that the keys in the group are pressed simultaneously:

                          BTN S1 {a b c}

will send the sequence:
                         +a +b +c -a -b -c


This function is useful when two or more keys need to be pressed at the 
same time, but it does not hold the keys down for any appreciable length 
of time. They are pressed and then immediately released. The simultaneous 
group is also useful where a game requires a particular SHF or ALT key to 
be used. The normal SHF, ALT, and CTL modifiers always use the codes for 
the Left key, i.e. LSFT. If you needed 'Right Shift x' you could program 
it as:

                          BTN S1 {RSFT x}

and force the use of the Right Shift key. The generated sequence would
be:
                         +RSFT +x -RSFT -x


Repeating Keypresses
--------------------

It frequently becomes necessary in F-22 programming to generate keys that 
are 'held down' to achieve some particular function. Normally this can be 
done by just specifying a single character as a repeating key:

                             BTN S1 a

This generates a sequence of multiple 'Make' codes while the button is 
held down, and generates a single 'Break' code when the button is 
released. 

This is essentially what the keyboard does, but there is one fundamental 
difference. When another button is pressed and the F-22 sends another 
character, the F-22 will send a 'Break' code for the repeating character, 
even if the button (S1 in this example) is still held down. The keyboard 
does not send the 'Break' code until the key is released. For example, if 
you programmed: BTN S1 a BTN S2 b then pressed S1, pressed S2, released 
S2, and then released S1, the F-22 would generate something like:

                   +a +a +a +a -a +b +b +b +b -b
                    
whereas if you did the same thing on the keyboard using the actual 'a' and 
'b' keys, the sequence would look like this:

                    +a +a +a +a +b +b +b +b -b -a

The F-22 was coded this way on purpose. When you're using the keyboard, 
you are generally aware of which keys you've got pressed at any particular 
time, and inappropriate combinations don't occur very often. When you're 
using the F-22, it's not always apparent what keys you are pressing. For 
example, look at the program segment:

                             BTN S1 A
                             BTN S2 b

If the F-22 actually emulated the keyboard, the generated sequence would
be:
                +SHF +a +a +a +a +b +b +b +b -b -SHF -a

if you pressed them in the order outlined for the first example. If you 
looked at this on the screen, you would see 'AAAABBBB', rather than the 
'AAAAbbbb' that you would expect, since the SHF key has not been released.
Forcing the 'Break' when S2 is pressed changes the sequence to:

                +SHF +a +a +a +a -SHF -a +b +b +b +b -b

which is more in keeping with the intent of the program. This is a fairly 
simple example, worse problems could occur. If S1 were defined as 'ALT a',
then so long as S1 were held, the PC would see every key coming at it as 
having the ALT modifier added, i.e. you'd not only get 'ALT a' like you 
wanted, you'd get 'ALT b', too, since the ALT would still be down from the 
S1 press. Disastrous combinations could occur, consider what might happen 
if a program contained something like:

                          BTN S1 CTL a
                          BTN S2 ALT j
                          BTN S3 DEL

and all three buttons were pushed. The PC would see a simultaneous press 
of CTL-ALT-DEL, and would likely reboot. Probably not exactly what you 
wanted to happen.


.TOPIC:
RAW
RAW Data Codes

RAW data codes allow you complete control over what the F-22 sends to the 
PC. You specify the actual codes sent to the PC by their hex values. There 
are no real limits placed on the use of RAW codes, they can be used within 
the /I-/O and /U-/M-/D groups, and so you can generate any key sequence 
that you want to. A complete listing of the RAW sequences for the 'Make' 
and 'Break' codes on the 101-Key Keyboard is listed at the end of this 
note.

The RAW data function was designed for situations where the normal F-22 
functions would not handle the task at hand. The most common use of them 
is to generate the so-called 'non-native' keys that the F-22 will not 
normally transmit. If you look over the RAW codes chart, you'll see that 
the majority of keys send a single RAW code for a 'Make', and send the 
value '#F0' followed by that same RAW code for the 'Break'. These are the 
'native' keys, and they correspond roughly to the keys on the older 84-Key 
AT keyboards. The other 'non-native' keys are primarily associated with 
the 101-Key Keyboard, and usually have an extra '#E0' added to the 
sequence. These keys include the auxiliary 'T-Cursor' pad and the other 
keys in the section of the 101-Key Keyboard between the main keys and the 
numeric pad.

The other primary use of the RAW codes is to generate key combinations 
that cannot normally be generated by the F-22, such as the use of held 
characters within /I-/O and /U-/M-/D Groups. The basic method for 
simulating a /H group is to generate a /P-/R set with the 'Make' codes on 
the /P side and the 'Break' codes on the /R side. For instance:

                   BTN S1 /P RAW(#1C)
                          /R RAW(#F0 #1C)

produces the same output as:

                       BTN S1 /H a

with the 'Make' code sent when the button is pressed and the 'Break' code 
being sent when it's released.

As mentioned earlier, using RAW codes within the /I-/O and /U-/M-/D groups 
is permitted, but it does not get around the basic problem with the 
'stuck' keys. You have to set the programming up so that the problem does 
not occur. The usual method is to include the 'Make' codes for a single 
function on the /P side, and to include the 'Break' codes for all possible 
functions on the /R side. This is generally possible since multiple 'Make' 
codes for a key generally do no harm, and 'Break' codes for keys that have 
not been 'Made' are generally ignored. For example. the program segment:

  BTN H1U /O /H f g
          /I /H KP5 KP8

would not compile, but the equivalent:

 BTN H1U /O /P RAW(#2B #34)                         rem Make 'f' and 'g'
            /R RAW(#F0 #2B #F0 #34)                 rem Break f, g 
         /I /P RAW(#73 #75)                         rem Make KP5 and KP8
            /R RAW(#F0 #73 #F0 #75)                 rem Break KP5 & KP8 

would compile just fine. This does not avoid the stuck key problem though. 
You need to 'Break' both possibilities on both sides, even though you will 
only 'Make' one of the codes:

 BTN H1U /O /P RAW(#2B #34)   rem Make 'f' and 'g'
            /R RAW(#F0 #2B #F0 #34 #F0 #73 #F0 #75) 
                              rem Break f, g, KP5 & KP8 
         /I /P RAW(#73 #75)   rem Make KP5 and KP8
            /R RAW(#F0 #2B #F0 #34 #F0 #73 #F0 #75) 
                              rem Break f, g, KP5 & KP8 

One thing to watch for here is that all those RAW codes take some time to 
send, about 50% longer than a regular /H group. The best thing to do is to 
set the RATE parameter down to 0, increase it only if you experience 
problems with the game in question. Most of the games will work just fine 
with a RATE of 0, the exceptions are games that only handle 1 key stroke 
per frame.

Keyboard Chart
--------------

The following chart shows the 'Make' and 'Break' for the keys on the 
standard 101-key keyboard. These are the codes necessary to use the RAW 
function in F-22 programming.

The keyboard modifies certain of the 'non-native' key code sequences 
depending on the Shift and NumLock states. These additions can normally be 
ignored when programming the F-22 and the normal non-shifted sequence 
used.

-----------------------------------------------------------------------------

           *** STANDARD 101-KEY KEYBOARD SCAN CODE SEQUENCES ***
             For Use with the F-22 'RAW' Programming Function

                          ** Main Keyboard **
----------------------------------------------------------------------------
  Key         Make Code                       Break Code         Notes
----------------------------------------------------------------------------
  `              #0E                           #F0 #0E
  1              #16                           #F0 #16
  2              #1E                           #F0 #1E
  3              #26                           #F0 #26
  4              #25                           #F0 #25
  5              #2E                           #F0 #2E
  6              #36                           #F0 #36
  7              #3D                           #F0 #3D
  8              #3E                           #F0 #3E
  9              #46                           #F0 #46
  0              #45                           #F0 #45
  -              #4E                           #F0 #4E
  =              #55                           #F0 #55
  Backspace      #66                           #F0 #66

  Tab            #0D                           #F0 #0D
  Q              #15                           #F0 #15
  W              #1D                           #F0 #1D
  E              #24                           #F0 #24
  R              #2D                           #F0 #2D
  T              #2C                           #F0 #2C
  Y              #35                           #F0 #35
  U              #3C                           #F0 #3C
  I              #43                           #F0 #43
  O              #44                           #F0 #44
  P              #4D                           #F0 #4D
  [              #54                           #F0 #54
  ]              #5B                           #F0 #5B
  \              #5D                           #F0 #5D

  Caps Lock      #58                           #F0 #58
  A              #1C                           #F0 #1C
  S              #1B                           #F0 #1B
  D              #23                           #F0 #23
  F              #2B                           #F0 #2B
  G              #34                           #F0 #34
  H              #33                           #F0 #33
  J              #3B                           #F0 #3B
  K              #42                           #F0 #42
  L              #4B                           #F0 #4B
  ;              #4C                           #F0 #4C
  '              #52                           #F0 #52
  Enter          #5A                           #F0 #5A

  Left Shift     #12                           #F0 #12
  Z              #1A                           #F0 #1A
  X              #22                           #F0 #22
  C              #21                           #F0 #21
  V              #2A                           #F0 #2A
  B              #32                           #F0 #32
  N              #31                           #F0 #31
  M              #3A                           #F0 #3A
  ,              #41                           #F0 #41
  .              #49                           #F0 #49
  /              #4A                           #F0 #4A
  Right Shift    #59                           #F0 #59

  Left Ctrl      #14                           #F0 #14
  Left Alt       #11                           #F0 #11
  Space          #29                           #F0 #29
  Right Alt      #E0 #11                       #E0 #F0 #11
  Right Ctrl     #E0 #14                       #E0 #F0 #14
  ESC            #76                           #F0 #76
----------------------------------------------------------------------------


                          ** Function Keys **
----------------------------------------------------------------------------
  Key         Make Code                       Break Code        Notes
----------------------------------------------------------------------------
  F1             #05                           #F0 #05
  F2             #06                           #F0 #06
  F3             #04                           #F0 #04
  F4             #0C                           #F0 #0C
  F5             #03                           #F0 #03
  F6             #0B                           #F0 #0B
  F7             #83                           #F0 #83
  F8             #0A                           #F0 #0A
  F9             #01                           #F0 #01
  F10            #09                           #F0 #09
  F11            #78                           #F0 #78
  F12            #07                           #F0 #07
----------------------------------------------------------------------------


                            ** Numeric Pad **
----------------------------------------------------------------------------
  Key         Make Code                       Break Code         Notes
----------------------------------------------------------------------------
  NumLok         #77                           #F0 #77
  KP-            #7B                           #F0 #7B
  KP/            #E0 #4A                       #E0 #F0 #4A     Notes 1, 2
  KP.            #71                           #F0 #71
  KP*            #7C                           #F0 #7C
  KP+            #79                           #F0 #79
  KPEnter        #E0 #5A                       #E0 #F0 #5A

  KP0            #70                           #F0 #70
  KP1            #69                           #F0 #69
  KP2            #72                           #F0 #72
  KP3            #7A                           #F0 #7A
  KP4            #6B                           #F0 #6B
  KP5            #73                           #F0 #73
  KP6            #74                           #F0 #74
  KP7            #6C                           #F0 #6C
  KP8            #75                           #F0 #75
  KP9            #7D                           #F0 #7D
----------------------------------------------------------------------------


                           ** Auxiliary Pads **
----------------------------------------------------------------------------
  Key           Make Code                      Break Code        Notes
----------------------------------------------------------------------------
  Ins            #E0 #70                       #E0 #F0 #70    Notes 1, 2, 3
  Home           #E0 #6C                       #E0 #F0 #6C    Notes 1, 2, 3
  Pg Up          #E0 #7D                       #E0 #F0 #7D    Notes 1, 2, 3
  Del            #E0 #71                       #E0 #F0 #71    Notes 1, 2, 3
  End            #E0 #69                       #E0 #F0 #69    Notes 1, 2, 3
  Pg Dn          #E0 #7A                       #E0 #F0 #7A    Notes 1, 2, 3

  Up Arrow       #E0 #75                       #E0 #F0 #75    Notes 1, 2, 3
  Left Arrow     #E0 #6B                       #E0 #F0 #6B    Notes 1, 2, 3
  Right Arrow    #E0 #74                       #E0 #F0 #74    Notes 1, 2, 3
  Down Arrow     #E0 #72                       #E0 #F0 #72    Notes 1, 2, 3

  PrtSc          #E0 #12 #E0 #7C               #E0 #F0 #7C #E0 #F0 #12
  Ctl-PrtSc      #E0 #7C                       #E0 #F0 #7C
  Alt-PrtSc      #84                           #E0 #84
  ScrLk          #7E                           #F0 #7E
  Pause          #E1 #14 #77 #E1 #F0 #14 #77   None
  Ctrl-Break     #E0 #7E #E0 #F0 #7E           None

----------------------------------------------------------------------------


                                ** Notes **
----------------------------------------------------------------------------

  Note 1

     If Left Shift is Down:

        Make Sequence - #E0 #F0 #12 #** #**
       Break Sequence _ #** #** #** #E0 #12

  Note 2

    If Right Shift is Down:

        Make Sequence - #E0 #F0 #59 #** #**
       Break Sequence - #** #** #** #E0 #59

  Note 3

    If Num Lock is On:

        Make Sequence - #E0 #12 #** #**
       Break Sequence - #** #** #** #E0 #F0 #12

  The '#** #**' entry represents the Make Code and the '#** #** #**' entry
  represents the  Break Code specified for the character in the main chart
  and should be replaced with those sequences in actual use.


Note:  Raw Scan code examples for the ThrustMaster F-22/WCS II & F-22/TQS.

Refer to the below - you can cut and paste these into your sims/games 
based on how the commands respond in that game or sim.

Some games may require a simple press and release of the command to 
operate properly - the proper format for that is the examples of the press 
and release of the c command below.

For those that only require a press and do not even look for a release, 
the second example would be all that is required.

For the Extended keypad (aka the Grey Keys) such as INS, DEL, HOME, END, 
UAROW, DAROW, LAROW, & RAROW examples of those are given also.  These may 
also be cut and pasted into your game or sim .F22 or .M22 file.

Most of the examples shown may be used directly in the .F22 file in place 
of the keyboard key entered just to the right, after one space, of a 
button or hat command. For example, to enter a command to button S1 on the 
F-22 as a RAW scan code directly in the .F22 file simply do this:

BTN S1 RAW (#21 #F0 #21) REM press & release of c key and it will work 
just as well as if you enter it into a .M22 file and give it a macro name 
like this:

Keyc/P/R = RAW (#21 #F0 #21)

And then enter this in the .F22 file:

BTN S1 = Keyc/P/R

You can do this with any key and ignore even using a .M22 if you wish, 
just enter the key next to the button or hat assignment and use any of the 
slash codes you need and the key or keys you need like this:

BTN S1 /P /T a /T b /R /T c /T d REM Toggle a/c/b/d.

and it will work fine.  All that is needed is to leave out any MDEF file 
name.

General tips for most sims or games:

DO NOT USE FCLK (this is only needed for games that actually look for a 
keypress on one frame and a key release on a second frame.  How to tell?  
For example, you program a SHF on a key to fire the guns and when you 
press the button that will fire the guns they fire and continue to fire 
until you hit a key on the keyboard or the guns empty out.  This is an 
example of a 'stuck key' and the way around it is to try FCLK.  Dynamix 
sims such as Aces of the Pacific have this type of problem due to the way 
the sim is programmed.

USE RATE 0 (ZERO) FIRST - ALWAYS - why? Because your keys will be 
generated the fastest this way.  If you then have problems where SOME keys 
are not releasing, or they will work the first time, but not the second 
time you press them, this is likely a RATE problem (i.e. the sim or game 
is spending more time generating graphics, etc than it is devoting to more 
mundane tasks like reading the keyboard buffer and is consequently missing 
some keys).  If you encounter this - then try increasing the rate to 25, 
if the problem persists, try 50, and so on.  These type of problems are 
always characterized by the 'some keys work the first time I press them 
but never again the second unless I press the key again on the keyboard' - 
unlike the 'stuck key example above where FCLK might help, this is caused 
by the programming simply missing the release because it is too busy doing 
other things and not reading the keyboard buffer as often as it should.  
I've seen this with a lot of Digital Integrations programs and Origins 
Wing Commander series because they are intensively graphic programs and 
need a lot of CPU time.

The other characteristic of this type problem is that some keys will come 
thru and others will not but 'stuck keys' are not really happening, the 
program is just 'missing' seeing the press AND release because it's busy 
doing other things and you are furiously pressing buttons faster than it 
can keep up.  With this - do the same - try a RATE of 25 first, then 50 
and so on until the keys do come thru satisfactorily.

Examples of RAW scan codes:

REM - c press and release RAW code format is always the press first - #21 
- and then the release - #F0 #21: RAW (#21 #F0 #21)

REM - c press only:
RAW (#21)

REM - KP1 press and release:
RAW (#69 #F0 #69)

REM - KP1 press only:
RAW (#69)

REM - KP5 press and release:
RAW (#73 #F0 #73)

REM - Press RSFT dn + UAROW dn - Release RSFT up UAROW up:
/P (RAW (#59 #E0 #75)) /R RAW (#F0 #59 #E0 #F0 #75)

REM - Press RSFT dn + DAROW dn - Release RSFT up DAROW up:
/P (RAW (#59 #E0 #72)) /R RAW (#F0 #59 #E0 #F0 #72)

REM - Press RSFT dn + LAROW dn - Release RSFT up LAROW up:
/P (RAW (#59 #E0 #6B)) /R RAW (#F0 #59 #E0 #F0 #6B)

REM - Press RSFT dn + RAROW dn - Release RSFT up RAROW up:
/P (RAW (#59 #E0 #74)) /R RAW (#F0 #59 #E0 #F0 #74)

REM - Press CTL dn + UAROW dn - Release CTL up UAROW up:
/P (RAW (#E0 #14 #E0 #75)) /R RAW (#E0 #F0 #14 #E0 #F0 #75)

REM - Press CTL dn + DAROW dn - Release CTL up DAROW up:
/P (RAW (#E0 #14 #E0 #72)) /R RAW (#E0 #F0 #59 #E0 #F0 #72)

REM - Press CTL dn + RAROW dn - Release CTL up RAROW up:
/P (RAW (#E0 #14 #E0 #74)) /R RAW (#E0 #F0 #59 #E0 #F0 #74)

REM - Press CTL dn + LAROW dn - Release CTL up LAROW up:
/P (RAW (#E0 #14 #E0 #6B)) /R RAW (#E0 #F0 #59 #E0 #F0 #6B)

REM - INS press and release:
RAW (#E0 #70 #E0 #F0 #70)

REM - DEL press and release:
RAW (#E0 #71 #E0 #F0 #71)

REM - HOME press and release:
RAW (#E0 #6C #E0 #F0 #6C)

REM - END press and release:
RAW (#E0 #69 #E0 #F0 #69)

REM - PGUP press and release:
RAW (#E0 #7D #E0 #F0 #7D)

REM - PGDN press and release:
RAW (#E0 #7A #E0 #F0 #7A)

REM - PRTSC press and release:
RAW (#E0 #12 #E0 #7C #E0 #F0 #7C #E0 #F0 #12)

REM - PRTSC press only:
RAW (#E0 #12 #E0 #7C)

REM - CTL PRTSC press and release:
RAW (#E0 #7C #E0 #F0 #7C)

REM - ALT PRTSC press and release:
RAW (#84 #E0 #84)

REM - ALT PRTSC press only:
RAW (#84)

REM - PAUSE press or press and release (there really is no release, Pause, 
and Break are 'special' keys): RAW (#E1 #14 #77 #E1 #F0 #14 #77)

REM - CTL BRK press or press and release: RAW (#E0 #7E #E0 #F0 #7E)

NOTE: You can find all the above and even more information on handling RAW 
scan codes and how to get around 'difficult situations' created by 
'creative' programmers by downloading the file AN0001.ZIP or AN0001.TXT 
from ThrustMaster's WEB page (Tech Support - PC - File Lib - Utilities) at 
http://www.thrustmaster.com.  The file is also available in the GAMDPUB - 
ThrustMaster Forum Library on CompuServe Information Service, as well as 
other online services where ThrustMaster is active, such as AOL, DELPHI, 
ITI, etc. This file contains a complete listing of RAW scan code PRESS 
strings and RAW scan code RELEASE strings and how to use them as either a 
press only or a press and a release for every key on the keyboard.

NOTE: You will never encounter a situation where you will need a RELEASE 
only command because a PRESS will always be called for first - so an 
attempt to download a file with a RELEASE only, whether a RAW scan code 
release or a /R release will generate an error by the complier when you 
attempt to download it.

.TOPIC:
Contacting ThrustMaster

If you have problems with your F-22, please call ThrustMaster 
Technical support.  Phone support is available Monday-Friday, 7:00 - 6:00 
PST at (503) 615-3201.  See the listing below for email addresses and 
other on-line information.

In order to better assist with your problem we ask that you gather as much 
information as you can before calling.  Knowing the speed, make, and model 
of your computer system is very helpful information.  If possible, try 
using the F-22 on another computer.

The Service Department is available at (503) 615-3202. 
Note: All products being returned must have an RMA number issued by 
Service and Repair. Any product sent to ThrustMaster without an RMA number
will be refused and returned to the sender.

Online services

    Compuserve           -   GO GAMDPUB, 72662,2334
    America Online       -   ThrustMast  
    GENIE                -   Thrust.dude
    Prodigy              -   GVRR37A
    Internet email       -   techsupp@thrustmaster.com and
                             service@thrustmaster.com
    Web Site             -   http://www.thrustmaster.com


General address and phone numbers

    ThrustMaster, Inc.
    7175 NW Evergreen Parkway #400
    Hillsboro, OR 97124

    VOICE (503) 615-3200
    FAX   (503) 615-3300

